// Loesung_von_Aufgabe_2.5.7_2_Vektorzerlegung

/* Zerlegung des Vektors der Gewichtskraft Fg in eine Normalkraft Fn
 und eine Hangabtriebskraft Fh auf einer unsichtbaren schiefen Ebene. */

float w = 30; // Winkel in Grad

PVector Fg = new PVector (0, 200, 0); // Gewichtskraft
float FgB = Fg.mag(); // Betrag der Gewichtskraft
PVector Fn = PVector.mult(Fg, cos(radians(w))); // Normalkraft
float FnB = Fn.mag(); // Betrag der Gewichtskraft
Fn.rotate(radians(-w)); // Drehung von Fn um den Winkel w nach rechts
PVector Fh = PVector.mult(Fg, sin(radians(w))); // Hangabtriebskraft
float FhB = Fh.mag(); // Betrag der Hangabtriebskraft
Fh.rotate(radians(90-w)); // Drehung von Fh um 90°-w nach links

size(400, 400);
background(230);
translate(200, 100); // Verschiebung des Koordinatenursprungs

// Koordinatenkreuz
stroke(255);
strokeWeight(3);
line(0, -200, 0, 300);
line(-200, 0, 200, 0);

// Hilfslinien
stroke(0);
strokeWeight(1);
line(Fh.x, Fh.y, Fg.x, Fg.y);
line(Fn.x, Fn.y, Fg.x, Fg.y);

// Vektoren
strokeWeight(3);
stroke(255, 0, 0); // Gewichtskraft
line(0, 0, Fg.x, Fg.y);
stroke(0, 255, 0); // Normalkraft
line(0, 0, Fn.x, Fn.y);
stroke(0, 0, 255); // Hangabtriebskraft
line(0, 0, Fh.x, Fh.y);

noStroke();
fill(255, 0, 0);
ellipse(Fg.x, Fg.y, 10, 10); // Kinderpfeilspitze für die Gewichtskraft
fill(0, 255, 0);
ellipse(Fn.x, Fn.y, 10, 10); // Kinderpfeilspitze für die Normalkraft
fill(0, 0, 255);
ellipse(Fh.x, Fh.y, 10, 10); // Kinderpfeilspitze für die Hangabtriebskraft

// Schwarzer Körper auf der unsichtbaren schiefen Ebene
stroke(0);
strokeWeight(15);
point(0, 0);

println("w = " +w, "FgB = " +FgB, "FnB = " +FnB, "FhB = " +FhB);